home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games Extra 1996 September / Amiga Games Extra CD-ROM 9-1996.iso / userbox / publicdomain / vim-4.2 / src / version.c < prev    next >
C/C++ Source or Header  |  1996-06-17  |  11KB  |  357 lines

  1. /* vi:set ts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved        by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  */
  8.  
  9. #include "vim.h"
  10. #include "globals.h"
  11. #include "proto.h"
  12.  
  13. /*
  14.  * Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred)
  15.  * It has been changed beyond recognition since then.
  16.  *
  17.  * All the remarks about older versions have been removed, they are not very
  18.  * interesting.  Differences between version 3.0 and 4.0 can be found in
  19.  * "../doc/vim_40.txt".
  20.  *
  21.  * Changes between version 4.1 and 4.2:
  22.  * - Included ctags version 1.3.
  23.  * - Included xxd.c version 1.4 (only one change since 1.3m)
  24.  * - Unix: Adjusted check for child finished again.  Now use != ECHILD
  25.  *   instead of == EINTR.
  26.  * - Fixed: loading compressed files (with autocommands) didn't work when
  27.  *   'textmode' was previously set.
  28.  * - Fixed: When executing a shell, a window resize was not recognized for
  29.  *   Unix.
  30.  * - Fixed: For GUI, when executing an external command, a window resize
  31.  *   caused the buffer to be redrawn.
  32.  * - Fixed: Error message for not being able to open the .viminfo file could
  33.  *   report the wrong filename.
  34.  * - MS-DOS, Win32, OS/2: When $HOME is not set, use "C:/".
  35.  * - OS/2: Improved handling of wildcards again.  Didn't ignore case, didn't
  36.  *   work with backslashes.
  37.  * - Fixed: ":s/pat<Tab>" could cause a core dump or other problems.
  38.  * - Fixed: When entering a hidden buffer with ":e", the BufEnter autocommands
  39.  *   were not executed.
  40.  * - Fixed: Ignoring a CTRL-Z at end-of-file was only done on MS-DOS.  Now it
  41.  *   also works on other systems, but only in textmode.
  42.  * - Fixed: In the GUI special characters were not passed on to external
  43.  *   commands, typeahead was truncated.
  44.  * - Added "gq" as an alias to "Q".  Should be used when "Q" is made to be Vi
  45.  *   compatible: go to Ex mode.
  46.  * - Fixed: "gu" in Visual mode could not be redone with "." correctly.
  47.  * - Fixed: ":normal" command made any typeahead executed right away, causing
  48.  *   unpredictable problems.
  49.  * - Fixed: ":normal atest^[" didn't update the screen.
  50.  * - Fixed: Redoing blockwise visual delete at the end of the file could cause
  51.  *   "invalid line number" errors.
  52.  * - Fixed: vim_rename() didn't open the output file in binary mode, could
  53.  *   cause the .viminfo file to contain CR-LF on OS/2.
  54.  * - Fixed: OS/2 was using /tmp/xxx for temporary file name, would fail if
  55.  *   there is no /tmp directory.  Now use $TMP/xxx, defaulting to c:/ if $TMP
  56.  *   is not set.
  57.  * - Fixed: When USE_TMPNAM was defined, was using the wrong array size for
  58.  *   the viminfo temporary file.
  59.  *
  60.  * Changes between version 4.0 and 4.1:
  61.  *
  62.  * - Included xxd.c version 1.3m.
  63.  * - Included ctags version 1.2.
  64.  * - Included tools/efm_filt.er.
  65.  * - Included changes for port to Atari MiNT, including makefile.mint.
  66.  * - Included a few changes for OS/2: Improved executing external commands,
  67.  *   depending on the shell; Handle resize after executing an external
  68.  *   command; Handle wildcard expansion for more than one argument (e.g.
  69.  *   ":n *.c *.h").
  70.  * - Include a lot of small changes to the docs.
  71.  * - Fixed: GUI version would busy-loop and mappings didn't work.  Was caused
  72.  *   by gui_mch_wait_for_chars() not working properly.  This fix was the main
  73.  *   reason for releasing 4.1.
  74.  * - Fixed: setting 'term' while GUI is active was possible, and caused
  75.  *   problems.
  76.  * - Fixed: When the "to" part of a mapping or menu command was long (more
  77.  *   than 24 chars on 32 bit MS-DOS, 128 chars on other systems), any <> were
  78.  *   not translated and CTRL-Vs not removed.
  79.  * - Fixed: 'modified' option was included for ":mkvimrc", it shouldn't.
  80.  * - Included a few changes for that Atari MiNT port (vt52 builtin term
  81.  *   entry).
  82.  * - Fixed: on MS-DOS a file name pattern for an autocommand that contains
  83.  *   "\*" or "\?" didn't work.
  84.  * - On MS-DOS and Amiga, ignore case when matching the file name pattern for
  85.  *   autocommands.
  86.  * - Fixed: using :set to show the value of two options gave an error message
  87.  *   (e.g. ":set so sj").
  88.  * - Fixed: Non-printable characters in a file name caused trouble when
  89.  *   displayed in a status line.
  90.  * - Pack the MS-DOS zip files with Infozip, under Unix.  Preserves the long
  91.  *   filenames and case.  Files with two dots don't work though, the first dot
  92.  *   is replaced with an underscore.
  93.  * - Fixed: Pasting more than one line with the mouse in insert mode, didn't
  94.  *   put the cursor after the last pasted character.
  95.  * - When pasting linewise text, put the '] mark on the last character of the
  96.  *   last line, instead of the first character of the last line.
  97.  * - Fixed: on some Unix systems, when resizing the window while in a external
  98.  *   command (e.g., ":!cat"), Vim would stop waiting for the child, causing
  99.  *   trouble, because the child is still running.
  100.  * - Fixed: resizing the window while executing an external command, and
  101.  *   't_ti' and 't_te' are defined to swap display buffers, Vim would redraw
  102.  *   in the wrong display buffer after the "hit RETURN" message.
  103.  * - Fixed: "va", "vA", "Vp", "VP", "Vs" and "VS" didn't set the cursor
  104.  *   position used for up/down movements (e.g., when using "j" after them).
  105.  * - Fixed: in GUI version, after using "cw" visual selection by dragging the
  106.  *   mouse didn't work.
  107.  * - Fixed: setting 'ttyscroll' to 0 caused scrolling of message to stop
  108.  *   working.
  109.  * - Fixed: the "WARNING: file changed" message caused buffers to be flushed
  110.  *   and subsequent commands not to be executed.
  111.  * - Fixed: in Insert mode, the message from "^O^G" would be
  112.  *   overwritten by the mode message if 'showmode' set.
  113.  * - Fixed: Using ":bdel" when there is only one buffer with two windows,
  114.  *   could cause a crash.
  115.  * - Changed: the '<' flag in 'cpoptions' now only switches off the
  116.  *   recognizing of the <> form of key codes.  The 'k' flag is now used for
  117.  *   the recognizing of raw key codes.
  118.  * - Fixed: Typing ':' at the --more-- prompt, when displaying autocommands,
  119.  *   caused extra linefeeds to be produced.
  120.  * - Fixed: Using 'tagrelative' and ":set tags=./../tags", filenames would
  121.  *   contain "../" as many times as CTRL-] would be used.  These are removed
  122.  *   now.
  123.  * - Fixed: Extremely long error message could cause a crash (e.g., when
  124.  *   using ":help ^A<CR>").
  125.  * - Added check for negative value of 'textwidth'.
  126.  * - Fixed: On MS-DOS, getting the value of $HOME would cause the current
  127.  *   directory for the drive to be changed.
  128.  */
  129.  
  130. /*
  131.  * Version[] is copied into the swap file (max. length is 10 chars).
  132.  * longVersion[] is used for the ":version" command and "Vim -h".
  133.  * Don't forget to update the numbers in version.h for Win32!!!
  134.  */
  135.  
  136. char           *Version = "VIM 4.2";
  137. #ifdef HAVE_DATE_TIME
  138. char           *longVersion = "VIM - Vi IMproved 4.2 (1996 June 17, compiled " __DATE__ " " __TIME__ ")";
  139. #else
  140. char           *longVersion = "VIM - Vi IMproved 4.2 (1996 June 17)";
  141. #endif
  142.  
  143. static void version_msg __ARGS((char *s));
  144.  
  145.     void
  146. do_version(arg)
  147.     char_u    *arg;
  148. {
  149.     long        n;
  150.  
  151.     if (*arg != NUL)
  152.     {
  153.         found_version = getdigits(&arg) * 100;
  154.         if (*arg == '.' && isdigit(arg[1]))
  155.         {
  156.             /* "4.1"  -> 401, "4.10" -> 410 */
  157.             n = arg[1] - '0';
  158.             if (isdigit(arg[2]))
  159.                 found_version += (arg[2] - '0') + n * 10;
  160.             else
  161.                 found_version += n;
  162.         }
  163.         if (found_version > 400)
  164.         {
  165.             MSG("Warning: Found newer version command");
  166.             if (sourcing_name != NULL)
  167.             {
  168.                 MSG_OUTSTR(" in: \"");
  169.                 msg_outstr(sourcing_name);
  170.                 MSG_OUTSTR("\" line: ");
  171.                 msg_outnum((long)sourcing_lnum);
  172.             }
  173.         }
  174.     }
  175.     else
  176.     {
  177.         msg_outchar('\n');
  178.         MSG(longVersion);
  179. #ifdef WIN32
  180.         MSG_OUTSTR("\nWindows NT / Windows 95 version");
  181. #endif
  182. #ifdef MSDOS
  183. # ifdef DJGPP
  184.         MSG_OUTSTR("\n32 bit MS-DOS version");
  185. # else
  186.         MSG_OUTSTR("\n16 bit MS-DOS version");
  187. # endif
  188. #endif
  189.         MSG_OUTSTR("\nCompiled with (+) or without (-):\n");
  190. #ifdef AMIGA            /* only for Amiga systems */
  191. # ifdef NO_ARP
  192.         version_msg("-ARP ");
  193. # else
  194.         version_msg("+ARP ");
  195. # endif
  196. #endif
  197. #ifdef AUTOCMD
  198.         version_msg("+autocmd ");
  199. #else
  200.         version_msg("-autocmd ");
  201. #endif
  202. #ifdef NO_BUILTIN_TCAPS
  203.         version_msg("-builtin_terms ");
  204. #endif
  205. #ifdef SOME_BUILTIN_TCAPS
  206.         version_msg("+builtin_terms ");
  207. #endif
  208. #ifdef ALL_BUILTIN_TCAPS
  209.         version_msg("++builtin_terms ");
  210. #endif
  211. #ifdef CINDENT
  212.         version_msg("+cindent ");
  213. #else
  214.         version_msg("-cindent ");
  215. #endif
  216. #ifdef COMPATIBLE
  217.         version_msg("+compatible ");
  218. #else
  219.         version_msg("-compatible ");
  220. #endif
  221. #ifdef DEBUG
  222.         version_msg("+debug ");
  223. #endif
  224. #ifdef DIGRAPHS
  225.         version_msg("+digraphs ");
  226. #else
  227.         version_msg("-digraphs ");
  228. #endif
  229. #ifdef EMACS_TAGS
  230.         version_msg("+emacs_tags ");
  231. #else
  232.         version_msg("-emacs_tags ");
  233. #endif
  234.             /* only interesting on Unix systems */
  235. #if !defined(USE_SYSTEM) && defined(UNIX)
  236.         version_msg("+fork() ");
  237. #endif
  238. #ifdef UNIX
  239. # ifdef USE_GUI_MOTIF
  240.         version_msg("+GUI_Motif ");
  241. # else
  242. #  ifdef USE_GUI_ATHENA
  243.         version_msg("+GUI_Athena ");
  244. #  else
  245.         version_msg("-GUI ");
  246. #  endif
  247. # endif
  248. #endif
  249. #ifdef INSERT_EXPAND
  250.         version_msg("+insert_expand ");
  251. #else
  252.         version_msg("-insert_expand ");
  253. #endif
  254. #ifdef HAVE_LANGMAP
  255.         version_msg("+langmap ");
  256. #else
  257.         version_msg("-langmap ");
  258. #endif
  259. #ifdef LISPINDENT
  260.         version_msg("+lispindent ");
  261. #else
  262.         version_msg("-lispindent ");
  263. #endif
  264. #ifdef RIGHTLEFT
  265.         version_msg("+rightleft ");
  266. #else
  267.         version_msg("-rightleft ");
  268. #endif
  269. #ifdef SMARTINDENT
  270.         version_msg("+smartindent ");
  271. #else
  272.         version_msg("-smartindent ");
  273. #endif
  274.             /* only interesting on Unix systems */
  275. #if defined(USE_SYSTEM) && (defined(UNIX) || defined(__EMX__))
  276.         version_msg("+system() ");
  277. #endif
  278. #if defined(UNIX) || defined(__EMX__)
  279. /* only unix (or OS/2 with EMX!) can have terminfo instead of termcap */
  280. # ifdef TERMINFO
  281.         version_msg("+terminfo ");
  282. # else
  283.         version_msg("-terminfo ");
  284. # endif
  285. #else                /* unix always includes termcap support */
  286. # ifdef HAVE_TGETENT
  287.         version_msg("+tgetent ");
  288. # else
  289.         version_msg("-tgetent ");
  290. # endif
  291. #endif
  292. #ifdef VIMINFO
  293.         version_msg("+viminfo ");
  294. #else
  295.         version_msg("-viminfo ");
  296. #endif
  297. #ifdef WRITEBACKUP
  298.         version_msg("+writebackup ");
  299. #else
  300.         version_msg("-writebackup ");
  301. #endif
  302. #ifdef UNIX
  303. # if defined(WANT_X11) && defined(HAVE_X11)
  304.         version_msg("+X11 ");
  305. # else
  306.         version_msg("-X11 ");
  307. # endif
  308. #endif
  309.         msg_outchar('\n');
  310. #ifdef USR_VIMRC_FILE
  311.         version_msg("user vimrc file: \"");
  312.         version_msg(USR_VIMRC_FILE);
  313.         version_msg("\" ");
  314. #endif
  315. #ifdef USR_EXRC_FILE
  316.         version_msg("user exrc file: \"");
  317.         version_msg(USR_EXRC_FILE);
  318.         version_msg("\" ");
  319. #endif
  320. #ifdef USE_GUI
  321.         version_msg("user gvimrc file: \"");
  322.         version_msg(USR_GVIMRC_FILE);
  323.         version_msg("\" ");
  324. #endif
  325. #if defined(HAVE_CONFIG_H) || defined(OS2)
  326.         msg_outchar('\n');
  327.         version_msg("system vimrc file: \"");
  328.         version_msg((char *)sys_vimrc_fname);
  329.         version_msg("\"");
  330. # ifdef USE_GUI
  331.         msg_outchar('\n');
  332.         version_msg("system gvimrc file: \"");
  333.         version_msg((char *)sys_gvimrc_fname);
  334.         MSG_OUTSTR("\"");
  335. # endif
  336.         msg_outchar('\n');
  337.         version_msg("Compilation: ");
  338.         version_msg((char *)all_cflags);
  339. #endif
  340.     }
  341. }
  342.  
  343. /*
  344.  * Output a string for the version message.  If it's going to wrap, output a
  345.  * newline, unless the message is too long to fit on the screen anyway.
  346.  */
  347.     static void
  348. version_msg(s)
  349.     char        *s;
  350. {
  351.     int        len = strlen(s);
  352.  
  353.     if (len < (int)Columns && msg_col + len >= (int)Columns)
  354.         msg_outchar('\n');
  355.     MSG_OUTSTR(s);
  356. }
  357.